package com.tamd.lease.web.admin.custom.config;

import com.tamd.lease.web.admin.custom.converter.StringToBaseEnumConverterFactory;
import com.tamd.lease.web.admin.interceptor.AuthenticationInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@RequiredArgsConstructor
@Configuration
/**
 * WebMvc配置类，用于配置拦截器等Web相关的设置
 */
public class WebMvcConfiguration implements WebMvcConfigurer {
    private final AuthenticationInterceptor authenticationInterceptor;
    private final StringToBaseEnumConverterFactory stringToBaseEnumConverterFactory;

    /**
     * 添加拦截器到Spring的拦截器注册表中
     * @param registry 拦截器注册表，用于注册拦截器到Spring框架中
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 在注册表中添加认证拦截器，并配置拦截和排除的路径模式
        registry.addInterceptor(authenticationInterceptor)
                .addPathPatterns("/admin/**") // 拦截所有/admin路径下的请求
                .excludePathPatterns("/admin/login/**"); // 排除/admin/login路径下的请求，允许未认证的用户访问登录页面
    }
   /**
     * 添加格式化器
     * 此方法用于向Spring的FormatterRegistry注册自定义的类型转换器
     * 通过注册自定义的转换器，可以使得Spring MVC在处理请求参数时能够使用我们定义的规则进行数据类型的转换
     * @param registry FormatterRegistry对象，用于注册格式化器和转换器
     */
    @Override
    public void addFormatters(FormatterRegistry registry) {
        // 向注册表中添加自定义的字符串到特定类型的转换器
        registry.addConverterFactory(this.stringToBaseEnumConverterFactory);
    }

}

